package br.com.sjdr.projeto.pessoa;

import java.awt.Color;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import br.com.sjdr.projeto.inicio.Util;
import br.com.sjdr.projeto.persistencia.PersistirFornecedor;

/**
 * Classe respons�vel por criar, buscar, listar e excluir fornecedores. Esta classe � filha da 
 * classe <i>Pessoa</i>.
 * @author thalim
 *
 */
public class Fornecedor extends Pessoa {

	static Util u = new Util();

	// Atributos

	private String codigo;
	private String CNPJ;

	// Metodos

	public String getCodigo() { // get and set codigo
		return codigo;
	}

	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}

	public String getCNPJ() { // get and set CNPJ
		return CNPJ;
	}

	public void setCNPJ(String string) {
		this.CNPJ = string;
	}

	/**
	 * M�todo respons�vel por criar um novo forrnecedor. � necess�rio informar um nome 
	 * que n�o tenha sido cadastrado anteriormente, um c�digo v�lido, um endere�o, telefone e um CNPJ.
	 * Caso o fornecedor j� exista, o usu�rio tem a op��o de escrever um outro nome sem sair 
	 * do m�todo e voltar ao menu principal.
	 */
	public static void novoFornecedor(JTextField campoNome, JTextField campoCodigo, JTextField campoEnd, JTextField campotel, JTextField campoCnpj, JTextField campomsg) {
		
		Fornecedor forn = new Fornecedor();
		forn.setNome(campoNome.getText());
										
		if(verificaExist(forn.getNome())==true){ 
			campoNome.setForeground(Color.RED);
			campoNome.setText("FORNECEDOR JA CADASTRADO!");
			campomsg.setForeground(Color.RED);
			campomsg.setText("Falha ao efetuar cadastro!");					
		}
						
		else{  
							
			forn.setEndereco(campoEnd.getText());  
			forn.setTelefone(campotel.getText());
			forn.setCNPJ(campoCnpj.getText());			
																							
			if(!verificaCodigo(campoCodigo.getText())){ 
				campoCodigo.setForeground(Color.RED);
				campoCodigo.setText("CODIGO INVÁLIDO,DIGITE OUTRO!");
				campomsg.setForeground(Color.RED);
				campomsg.setText("Falha ao efetuar cadastro!");						
			}
			else{
				forn.setCodigo(campoCodigo.getText());
				PersistirFornecedor.fornecedorlist.add(forn); 
				campoNome.setText("");  
				campoCodigo.setText("");
				campoEnd.setText("");
			    campotel.setText("");
				campoCnpj.setText("");
				campomsg.setForeground(Color.BLUE);
				campomsg.setText("Cadastro efetuado com sucesso!");
			}
		}
	}

	/**
	 * M�todo que verifica se o c�digo do fornecedor � v�lido. Se o valor dado ao c�digo n�o for um 
	 * tipo Long ele retorna um erro.
	 * @param codigo
	 * @return
	 */
	public static boolean verificaCodigo(String codigo) { 	// verifica se o
															// codigo contem
		try {												// letras
			Long.parseLong(codigo);
		} catch (Exception e) {
			return false;
		}
		return true;
	}

	/**
	 * M�todo que verifica a exist�ncia de um fornecedor retornando verdadeiro ou falso 
	 * Se n�o encontrar, retornar� um valor falso.
	 * @param nome
	 * @return
	 */
	public static boolean verificaExist(String nome) { // Verifica se o
														// fornecedor esta
														// cadastrado
		boolean var = false;
		for (int i = 0; i < PersistirFornecedor.fornecedorlist.size(); i++) {
			if (PersistirFornecedor.fornecedorlist.get(i).getNome()
					.equalsIgnoreCase(nome)) {
				
				var = true;
			}
		}
		return var;
	}

	/**
	 * Metodo que verifica a existancia de um cliente retornando a sua posicao do 
	 * vetor <i>fornecedorlist</i> caso exista. Se nao encontrar, retornar um valor negativo.
	 * @author dante
	 * @param nome
	 * @return
	 */
	public static int verificaExistInt(String nome) { 
		int var = -1;
		for (int i = 0; i < PersistirFornecedor.fornecedorlist.size(); i++) {
			if (PersistirFornecedor.fornecedorlist.get(i).getNome()
					.equalsIgnoreCase(nome)) {
				var = i;
			}
		}
		return var;
	}
	
	/**
	 * M�todo que busca um fornecedor informado pelo usu�rio. Caso encontre, ele exibe
	 * as informa��es do fornecedor e  retorna
	 * a posi��o do elemento sen�o retorna um n�mero negativo.
	 * @return
	 */
	public static int buscarFornecedor(JTextField campoNome, JTextArea resultado) { 
		
		Fornecedor forn = new Fornecedor();
		forn.setNome(campoNome.getText());
		
		
		int elemento = 0;
		if (verificaExist(forn.getNome()) == true) {
			elemento = verificaExistInt(forn.getNome());
			if(elemento > -1){
				
			resultado.append("\n Nome : "+PersistirFornecedor.fornecedorlist.get(elemento).getNome());
			resultado.append("\n Codigo : "+PersistirFornecedor.fornecedorlist.get(elemento).getCodigo());
			resultado.append("\n Endereco : "+PersistirFornecedor.fornecedorlist.get(elemento).getEndereco());
			resultado.append("\n Telefone : "+PersistirFornecedor.fornecedorlist.get(elemento).getTelefone());
			resultado.append("\n CNPJ : "+PersistirFornecedor.fornecedorlist.get(elemento).getCNPJ());
			
			}else{
				resultado.append("Fornecedor nao encontrado!");
				}
		} else {
			resultado.append("Fornecedor nao esta cadastrado!");
			elemento = -1;
		}
		return elemento;
	}

	/**
	 * M�todo respons�vel pela exclus�o de fornecedores. O usu�rio pode escolher em excluir ou n�o 
	 * um fornecedor. Caso queira, � chamado o m�todo <i>buscarFornecedor</i> onde � buscado o 
	 * elemento no vetor <i>fornecedorlist</i>. Se o elemento foi encontrado, ele � excluido apartir 
	 * da sua posi��o do vetor.
	 */
	public static void excluirFornecedor(JTextField campoNome, JTextArea resultado) { 
		int x = 0;
		x = buscarFornecedor(campoNome, resultado);
		
		if (x >= 0){
			PersistirFornecedor.fornecedorlist.remove(x);
			resultado.setText("");
			resultado.append("Exclusao efetuada com sucesso!");	
		}
		else{
			resultado.setText("");
			resultado.append("Nao foi possivel efetuar a exclusao!");	
			}
	}

	/**
	 * M�todo respons�vel apenas por listar todos os dados presentes no vetor <i>fornecedorlist</i>.
	 * Ele exibe na tela o nome, endere�o, telefone, c�digo e cnpj de cada posi��o referente a um fornecedor.
	 */
	public static void listagemFornecedor(JTextArea resultado) { 
		
		if (PersistirFornecedor.fornecedorlist.size() > 0) {
			for (int i = 0; i < PersistirFornecedor.fornecedorlist.size(); i++) {
				
				resultado.append("\n\n Nome : "+PersistirFornecedor.fornecedorlist.get(i).getNome());
				resultado.append("\n Codigo : "+PersistirFornecedor.fornecedorlist.get(i).getCodigo());
				resultado.append("\n Endereco : "+PersistirFornecedor.fornecedorlist.get(i).getEndereco());
				resultado.append("\n Telefone : "+PersistirFornecedor.fornecedorlist.get(i).getTelefone());
				resultado.append("\n CNPJ : "+PersistirFornecedor.fornecedorlist.get(i).getCNPJ());
				
			}
		}
		else {
			resultado.append("Nao ha fornecedores cadastrados!");
		}
		
	}

}//fim da classe fornecedor